/* 
接口可以描述函数类型
限定函数的参数和返回值的类型
*/
(function () {
  /* 
  接口可以描述函数类型(参数的类型与返回的类型)
  */
 interface SearchFn {
    (x: string, y: string): boolean
 }
  
  let searchFn: SearchFn = function (a: string, b: string): boolean {
    return a.includes(b)
    // return true
  }
  let searchFn3: SearchFn = function (a: string): boolean {
    return true
  }

  searchFn('abcd', 'bc') // true
  searchFn('abcd', 'cb') // false


  let searchFn2: (a: string, b: string) => boolean 
    = function (x: string, y: string): boolean {
    return true
  }

  let xxxFn: SearchFn 

  // 接口定义的函数类型, 函数的参数类型与返回值类型都得一致, 但参数的个数可以少, 不能多
  // 用箭头函数格式来定义函数类型: 特点与接口定义的函数是一致
  // 箭头函数方式编码简洁一些, 但不能复用
  // 接口的方式编码相对麻烦一点, 但方便复用
})()